#ifndef USERINFOWIDGET_H
#define USERINFOWIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFormLayout>
#include <QGridLayout>
#include <QLineEdit>
#include <QLabel>
#include <QPushButton>
#include <QGroupBox>
#include <QMessageBox>
#include <QInputDialog>
#include <QTimer>
#include <QDateTime>
#include "models.h"
#include "usermanager.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 用户信息管理组件
 * 
 * 提供用户基本信息查看和编辑功能：
 * - 用户信息显示和编辑
 * - 密码修改功能
 * - 输入验证和错误提示
 * - 1024*600分辨率优化
 */
class UserInfoWidget : public QWidget
{
    Q_OBJECT

public:
    explicit UserInfoWidget(QWidget *parent = nullptr);
    ~UserInfoWidget();

    /**
     * @brief 设置当前用户信息
     * @param customer 用户信息
     */
    void setUserInfo(const Customer& customer);
    
    /**
     * @brief 刷新用户信息
     */
    void refreshUserInfo();
    

    
    /**
     * @brief 清空所有输入
     */
    void clearInputs();

signals:

    
    /**
     * @brief 密码修改请求信号
     * @param oldPassword 原密码
     * @param newPassword 新密码
     */
    void passwordChangeRequested(const QString& oldPassword, const QString& newPassword);
    
    /**
     * @brief 数据刷新请求信号
     */
    void dataRefreshRequested();

public slots:

    
    /**
     * @brief 处理密码修改成功
     */
    void onPasswordChanged();
    
    /**
     * @brief 处理操作错误
     * @param errorMessage 错误信息
     */
    void onOperationError(const QString& errorMessage);

private slots:

    
    /**
     * @brief 修改密码按钮点击槽
     */
    void onChangePasswordClicked();
    
    /**
     * @brief 刷新按钮点击槽
     */
    void onRefreshButtonClicked();
    


private:
    /**
     * @brief 初始化界面
     */
    void initializeUI();
    
    /**
     * @brief 创建用户信息区域
     */
    void createUserInfoArea();
    
    /**
     * @brief 创建操作按钮区域
     */
    void createActionArea();
    
    /**
     * @brief 应用样式表
     */
    void applyStyleSheet();
    
    /**
     * @brief 更新界面状态
     */
    void updateUIState();
    

    
    /**
     * @brief 显示操作结果
     * @param message 结果信息
     * @param success 是否成功
     */
    void showOperationResult(const QString& message, bool success = true);
    

    
    /**
     * @brief 格式化时间显示
     * @param dateTime 时间
     * @return 格式化后的字符串
     */
    QString formatDateTime(const QDateTime& dateTime) const;

private:
    // 主布局
    QVBoxLayout* m_mainLayout;
    
    // 用户信息区域
    QGroupBox* m_userInfoGroup;
    QFormLayout* m_formLayout;
    QLineEdit* m_usernameEdit;
    QLabel* m_userIdLabel;
    QLabel* m_registrationLabel;
    QLabel* m_lastLoginLabel;
    
    // 操作按钮区域
    QGroupBox* m_actionGroup;
    QHBoxLayout* m_actionLayout;
    QPushButton* m_changePasswordButton;
    QPushButton* m_refreshButton;
    
    // 状态标签已删除
    // QLabel* m_statusLabel;
    
    // 当前用户数据
    Customer m_currentCustomer;

    
    // 业务对象
    UserManager* m_userManager;
    
    // 状态标志
    bool m_isInitialized;
    

};

#endif // USERINFOWIDGET_H
